package Reflect;

import java.lang.reflect.Constructor;

public class ReflectDemo4 {
    public static void main(String[] args) throws Exception{
        /*
         * 使用反射调用有参数构造器
         */
        //1 获取 Class 对象(包含全部类信息)
        Class cls = Class.forName("reflect.Worker");
        //2 获取有参数构造器 getDeclaredConstructor
        //  Declared 声明 Constructor 构造器
        //  getDeclaredConstructor(参数列表) 根据参数类型
        //  查找一个特定的构造器，如果找不到就出现异常NoSuchMethodException，
        //  找到了就返回找到的构造器对象
        //  如下代码表示，寻找参数为 (String, int) 的构造器
        Constructor constructor=
                cls.getDeclaredConstructor(String.class, int.class);
        //constructor 代表找到的构造器对象
        System.out.println(constructor); //显示找到的对象
        //NoSuchMethodException Such 这样 Method 方法
        //没有这个的方法异常！
        //3 创建对象方法newInstance(参数值,参数值)
        //  参数值，必须和构造器参数列表一致，否则出现异常！
        Object obj = constructor.newInstance("光头强",24);
        //展示创建的对象：
        System.out.println(obj);
    }
}
